#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""  
@Project : project
@File : boom！.py
@Author : 陈培腾
@Time : 2024/10/24 0:13  
@脚本说明 : 
"""

import argparse
from mysql_boom import val_mysql
from redis_boom import val_redis

# 创建命令行解析器对象
parser = argparse.ArgumentParser(description="=" * 10 + "MySQL和redis数据库登录爆破工具" + "=" * 10 + "\n本工具库使用python脚本对市面上使用最广泛的两种进行登录爆破。可以自由替换密码本。采用多线程的方式提高爆破速率")

# 创建子命令容器，实现对两种功能的分离
subparsers = parser.add_subparsers(dest="sub_command")

# 向解析器添加参数 "MySQL", "redis"
# 脚本输入入口 dest 使用脚本参数的名称 default 默认值 help 提示帮助

# 创建 MySQL 子命令解释器与参数列表
mysql_parser = subparsers.add_parser("mysql", help="mysql数据库登录爆破")
mysql_parser.add_argument("--host", "-H", dest="host", type=str, default="127.0.0.1", help="MySQL 主机 (默认 127.0.0.1)")
mysql_parser.add_argument("--port", "-p", dest="port", type=int, default=3306, help="MySQL 端口 (默认 3306)")
mysql_parser.add_argument("--user", "-u", dest="user", type=str, default="未知用户名，待暴力破解", help="MySQL 用户名 (默认需要爆破用户名，速度较慢, 默认用户名字典./user.txt)")
mysql_parser.add_argument("--file1", "-F1", dest="file1", type=str, default="./password.txt", help="爆破密码本路径 (默认 ./password.txt)")
mysql_parser.add_argument("--file2", "-F2", dest="file2", type=str, default="./user.txt", help="爆破用户名字典路径 (默认 ./user.txt)")


# 创建 redis 子命令解释器与参数列表
redis_parser = subparsers.add_parser("redis", help="redis数据库登录爆破")
redis_parser.add_argument("--host", "-H", dest="host", type=str, default="127.0.0.1", help="MySQL 主机 (默认 127.0.0.1)")
redis_parser.add_argument("--port", "-p", dest="port", type=int, default=6379, help="MySQL 端口 (默认 3306)")
redis_parser.add_argument("--file", "-F", dest="file", type=str, default="./password.txt", help="爆破密码本路径 (默认 ./password.txt)")

# 解析命令行参数,此处可以理解为 args为爷爷，sub_command为args的儿子分别叫mysql和redis， host、username等为孙子。
args = parser.parse_args()

# 获得参数
if args.sub_command == "mysql":
    if args.user == "未知用户名，待暴力破解":
        print(f"MySQL 爆破:\n主机 {args.host},\n端口 {args.port},\n用户名字典 {args.file2},\n密码字典 {args.file1}")
    else:
        print(f"MySQL 爆破:\n主机 {args.host},\n端口 {args.port},\n用户 {args.user},\n密码字典 {args.file1}")
    val_mysql(host=args.host, port=args.port, user=args.user, file=args.file1, file2=args.file2)

elif args.sub_command == "redis":
    print(f"Redis 爆破\n主机 {args.host},\n端口 {args.port},\n密码本 {args.file}")
    val_redis(host=args.host, port=args.port, file=args.file)
else:
    print("请输入mysql或redis使用相应功能")